RPM(RedHat Package Manager)はレッドハットが開発したパッケージ管理のためのソフトウェアです。
RPMでは、関連したファイルはソフトウェアの種類ごとにグループ化されてパッケージとしてまとめられ、パッケージ単位で検索、インストール、アップグレード、アンインストール、検査などの管理ができます。
RPMには重要な機能の1つとして、パッケージ間の依存関係のチェック機能があります。
RPMはシステムにインストールされたパッケージの情報を/var/lib/rpmディレクトリの下のBerkeley DBで管理しています。このBerkeley DBの検索インデックスが一部壊れることがあり、その場合の修復オプションを覚えておくと役に立ちます。
修復コマンド: rpm --rebuilddb
パッケージには、パッケージのダイジェストとパッケージの情報を保持するヘッダのダイジェストが含まれており、この値と計算したダイジェストを比較すると、パッケージ内容の改ざんの有無を検査できます。
また、作成者の秘密鍵でパッケージとヘッダに署名することができます。パッケージの利用者は作成者が署名した秘密鍵と対の公開鍵により、署名が本物かどうかを調べ、パッケージが正当なものであるかどうかを検証できます。署名に使用する秘密鍵/公開鍵はGPGにより生成、管理されます。
(注)GPG(GNU Privacy Guard)は、公開鍵暗号PGP(Pretty Good Privacy)の標準仕様であるOpenPGPのGNUによる実装です。
デフォルトでは、パッケージのインストール時にダイジェストのチェックと署名チェックが行われます。
RPMパッケージのパッケージファイル名は、
パッケージ名-バージョン-リリース番号.アーキテクチャ.拡張子
となります
例えば、
zsh-4.2.6-1.i386.rpm
となります。
パッケージのインストールやアンインストールを行うには、rpm コマンドを使用します。インストールの際は依存関係のあるパッケージ(動作に必要な他のパッケージ)を調べ、もしシステムにそれらパッケージが存在しない場合は、そのことをユーザーに通知します。また、アンインストールする際に、そのパッケージが他パッケージと依存関係がある(他のパッケージの動作に必要とされる)場合には、アンインストールできない旨を通告します。さらに、既にシステムにインストール済みのパッケージをチェックすることも可能です。
パッケージのインストール、アンインストール、アップデートには管理者権限が必要です。
rpm [オプション] [パッケージファイル名] |
|
-i | パッケージのインストール |
-U | パッケージのアップグレード |
-e, --erase=<package>+ | パッケージの削除(アンインストール) |
-V, --verify | パッケージの検証 |
-q | パッケージ情報の表示 |
-v, --verbose | より詳細な出力を提供します。 |
--quiet | 詳細でない出力を提供します |
--version | 使用している rpm のバージョンを表示します。 |
--force | 強制的にパッケージを上書きする |
--oldpackage | 古いパッケージに置き換える |
--nodeps | パッケージの依存関係の検証を行いません |
--test | テストインストールする(実際にインストールは行わない) |
--replacefiles | ファイルが既に存在する場合、置き換える |
--noscripts | パッケージ指定のスクリプトを実行しない |
--root | --root <ディレクトリ名>で、作業ディレクトリを指定する |
--prefix | --prefix <ディレクトリ名>でパッケージをインストールするディレクトリを指定する |
--reLocate | --reLocate <旧ディレクトリ名=新ディレクトリ名>で、インストール済みのパッケージをディレクトリを変更して再インストールする(i と併用) |
-F, --freshen=<packagefile>+ | 既にインストール済みの場合のみアップグレード |
-h, --hash | パッケージをインストールにつれて '#' を表示します (-v と使用する) |
--nomd5 | MD5チェックサムによるファイル改竄の可能性の有無をチェックしません(Vと併用) |
-c, --configfiles | 全ての設定ファイルを列挙します |
-d, --docfiles | 全てのドキュメントファイルを列挙します |
--dump | 基本的なファイル情報をダンプします |
-l, --list | パッケージ中のファイルを列挙します |
-R, --requires | 指定されたパッケージが依存しているパッケージを表示する。 |
-a, --all | インストールされている全てのパッケージを一覧で表示する。 |
-p | 未インストールのパッケージファイルに対して問合せを行なう。 |
--nofiles | パッケージ中のファイルを検証しません |
--nodeps | パッケージの依存関係を検証しません |
--nomd5 --nofiledigest |
ファイルダイジェストの検証をしません |
rpmパッケージを新規インストールするには「-i 」(install)オプションを使用します。「-v
」(Verbose)はインストールの詳細情報を表示させるオプション、「-h」(hash)は進捗状況をハッシュマーク(#)で表示してくれます。
なお、「-vv」とvを2つ使用することによってさらに詳細な進捗状況を表示させることができます。
# rpm -ivh telnet-server-0.17-23.i386.rpm |
Preparing... ###############################[100%] 1:telnet-server ###############################[100%] |
RPMパッケージのアップグレードを行う場合は、「-U」(Upgrade)オプションを使用します。対象とするパッケージがインストールされているかわからない場合には、「-U」を「-i
」の代用として使用します。なお、旧バージョンに戻したい場合には「--oldpackage」オプションを用いて、
「rpm -Uvh --oldpackage 旧パッケージ名」のようにします。-U はシステムに同じパッケージが存在しない場合には、通常のインストールを行います。-F
オプションと区別して使用するようにします。
# rpm -Uvh telnet-server-0.17-23.i386.rpm |
Preparing... ###############################[100%] 1:telnet-server ###############################[100%] |
-U オプション同様RPMパッケージのアップグレードを行いますが、システムに同じパッケージが存在しない場合は、インストールを行いません。-U
オプションと区別して使用するようにします。
# rpm -Fvh telnet-server-0.17-23.i386.rpm |
Preparing... ###############################[100%] 1:telnet-server ###############################[100%] |
RPMパッケージのバージョンを表示したい場合には、「-q」」(query)オプションを使用します。全てのインストール済みのパッケージを表示させるには「-qa」オプションを用います。
# rpm -q telnet telnet-0.17-23 |
RPMパッケージの詳細な情報を表示したい場合には、「-i 」(Infomation)オプションを併用し、
「-qi」のように使用します。なお、-qip とすることでインストール前のRPMパッケージの詳細情報が表示されます。表示される情報は、-qi
実行時と同様のものです。
# rpm -qi samba |
Name : samba Relocations: (not relocatable) Version : 3.6.9 Vendor: CentOS Release : 151.el6 Build Date: 2013年02月22日 13時03分33秒 Install Date: 2013年04月02日 12時45分57秒 Build Host: c6b7.bsys.dev.centos.org Group : System Environment/Daemons Source RPM: samba-3.6.9-151.el6.src.rpm Size : 18533164 License: GPLv3+ and LGPLv3+ Signature : RSA/SHA1, 2013年02月24日 02時53分34秒, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.samba.org/ Summary : Server and Client software to interoperate with Windows machines Description : Samba is the suite of programs by which a lot of PC-related machines share files, printers, and other information (such as lists of available files and printers). The Windows NT, OS/2, and Linux operating systems support this natively, and add-on packages can enable the same thing for DOS, Windows, VMS, UNIX of all kinds, MVS, and more. This package provides an SMB/CIFS server that can be used to provide network services to SMB/CIFS clients. Samba uses NetBIOS over TCP/IP (NetBT) protocols and does NOT need the NetBEUI (Microsoft Raw NetBIOS frame) protocol. |
「-l 」(list)オプションをつけると、インストールされたRPMパッケージに含まれるファイルを調べることができます。インストールする前に予め、どのようなファイルがインストールされるかを調べるには、-ql とします。
# rpm -ql telnet-server |
/etc/xinetd.d/telnet /usr/sbin/in.telnetd /usr/share/man/man5/issue.net.5.gz /usr/share/man/man8/in.telnetd.8.gz /usr/share/man/man8/telnetd.8.gz |
「-c 」オプションをつけると、RPMパッケージのインストールに同時にインストールされた設定ファイルを調べることができます。
# rpm -qc samba |
/etc/logrotate.d/samba /etc/pam.d/samba /etc/samba/smbusers |
RPMパッケージをアンインストールするには、「-e」(erase)オプションを使用します。アンインストールする際に、依存関係を無視して削除する場合は、「--nodeps」オプションを付け加えます。
# rpm -e telnet-0.17-23 |
パッケージのインストール後にパッケージのファイルをどのように書き換えたかを検証するには「-V」オプションを使用します。問題がなければ、「.......」のようにドットで表示されます。-V
オプションを利用することでRPMデータベースに記録されている内容と実際にインストールされているファイルが一致しているかどうか調べることができるので、ファイルが改竄されていないかどうか、しかるべきファイルサイズでインストールされているかどうかをチェックすることができるので重宝します。また、インストール時にあったファイルが見つからない場合は、missing
と表示されます。インストールされている全てのパッケージを検査するには、-Va オプションを使用します。
# rpm -V telnet-server S.5....T c /etc/xinetd.d/telnet |
なお、変更が加えられていない場合は、「.......」のように表示されますが、変更が加えられている場合には、「S」や「T」、「5」のような検証コードが表示されます。以下にこれら検証コードの意味について記載しておきます。
S | ファイルサイズが異なっている |
5 | MD5チェックサムが異なる |
L | シンボリックリンクが変更されている |
T | ファイルの更新時刻が変更されている |
D | デバイスファイルが変更されている |
U | ファイルの所有者が変更されている |
G | ファイルの所有グループが変更されている |
M | ファイルのパーミッションが変更されている |
# rpm -qf /etc/rndc.key bind-9.2.1-16 |
RPMから特定のファイルを抽出できるコマンドとして、rpm2cpio があります。これを使うことでインストールせずに必要なファイルを抽出して利用したり、ディレクトリ構成が前もって把握できるのでとても重宝します。以下のコマンドでは、どのようなファイルが格納されているかを調べます。rpm
-qlp と同様の意味になります。
# rpm2cpio mt-daapd-0.2.1.1-1.fc3.i386.rpm | cpio --list |
実際に抽出するには以下のようにします。まず、ディレクトリを作成し、そこを作業用ディレクトリとします。コマンド実行後は階層ごとにファイルが抽出されます。
# mkdir mt-daap # cd mt-daap # rpm2cpio ~/mt-daapd-0.2.1.1-1.fc3.i386.rpm | cpio -id |
特定のファイルだけを抽出するには、
例として、mt-daapd.confを取り出すには、
# rpm2cpio mt-daapd-0.2.1.1-1.fc3.i386.rpm | cpio -ivd ./etc/mt-daapd.conf |
www.it-shikaku.jp